"""
爬取猫眼电影网站TOP 100的信息**

网址：https://maoyan.com/board/4

第一页：https://maoyan.com/board/4?offset=0
第二页：https://maoyan.com/board/4?offset=10
第三页：https://maoyan.com/board/4?offset=20
...
第十页：https://maoyan.com/board/4?offset=90

第1步完成：
	猫眼电影-第1页.html
	猫眼电影-第2页.html
	... ...

第2步完成：
	1、提取数据 ：电影名称、主演、上映时间
	2、先打印输出,然后存入到MySQL数据库
"""
import re
from urllib import request, parse
import time  # time.sleep(10)
import random  # 用来生成随机数


class MaoYanSpider:
    def __init__(self):
        '''定义对象内部的变量(实例变量)'''
        self.url_fmt = 'https://maoyan.com/board/4?offset={}'
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) '
                          'AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/80.0.3987.116 Safari/537.36'
        }

    def get_html(self, url):
        '''向网站发送请求，得到响应并拿到html 页面信息'''
        req = request.Request(url, headers=self.headers)
        resp = request.urlopen(req)
        content = resp.read()  # 读取接收的字节串
        html = content.decode()
        return html

    def parse_html(self, html):
        '''解析html文本，提取想要的信息数据'''
        title = re.findall(r'<a href=".*?" title="(.*?)" class="image-link"', html, re.S)
        print(title)
        time.sleep(5)

    def save_data(self, data):
        '''保存提取出来的数据，进行数据持久化'''

    def save_html(self, filename, html):
        '''保存html到filename文件中'''
        with open(filename, 'w') as fw:
            fw.write(html)

    def run(self):
        '''程序入口，控制爬虫的逻辑'''
        # 动态生成URL，爬取 多页数据
        for page in range(1, 11):
            pn = (page - 1) * 50
            # 生成链接
            url = self.url_fmt.format(pn)
            print('url:', url)
            # 生成对应页面的文件名
            filename = '猫眼电影第{}页.html'.format(page)
            # 爬取html
            html = self.get_html(url)
            self.save_html(filename, html)
            self.parse_html(html)
            # 控制爬取频率
            time.sleep(random.randint(3, 5))
            print(filename, '爬取成功')


if __name__ == '__main__':
    spider = MaoYanSpider()  # 创建实例对象
    spider.run()  # 开始爬取数据
